import { for_obj, is_empty, d_sort } from 'sui';

let msn_data = [];
let err_data = [];

const clear_info = () => {
    msn_data = [];
    err_data = [];
};

const init_info = (v) => {
    err_data = [];

    if (!v) {
        msn_data = [];
        return;
    }

    d_sort(v, "pos", true);
    msn_data = v;
};

const msn_info = (msn, pos="") => {
    const tmp = [];

    if (is_empty(msn_data)) {
        tmp.push({
            sn: msn,
            pos: pos,
        });

        msn_data = tmp;

        return true;
    }

    const f = msn_data.find(d => d.sn === msn);
    if (f) {
        return false;
    }

    tmp.push({
        sn: msn,
        pos: pos,
    });

    msn_data.forEach(d => tmp.push(d));

    d_sort(tmp, "pos", true);

    msn_data = tmp;

    return true;
};

const is_new = (msn) => {
    if (is_empty(msn_data)) {
        return true;
    }

    const f = msn_data.find(d => d.sn === msn);
    if (f) {
        return false;
    }

    return true;
};

const has_pos = (pos) => {
    if (is_empty(msn_data)) {
        return false;
    }

    const f = msn_data.find(d => d.pos === pos);
    if (f) {
        return true;
    }

    return false;
};

const info_rm = (umd, msn) => {
    const info = umd.info;
    if (is_empty(info)) {
        return;
    }

    const tmp = [];

    info.forEach(d => {
        if (msn === d.sn) {
            return;
        }

        tmp.push(d);
    });

    umd.setInfo(tmp);
};

const info_update = (umd, tmp_v) => {
    const info = umd.info;
    const tmp = [];

    info.forEach(d => {
        const f = tmp_v[d.sn];
        if (f) {
            for_obj(f, (k, v) => d[k] = v);
        }

        tmp.push(d)
    });

    umd.setInfo(tmp)
};

const info_data = (umd, sn) => {
    const info = umd.info;
    if (is_empty(info)) {
        return null;
    }

    const f = info.find(d => d.sn === sn);
    return f;
};

const msn_error = (msn, pos="") => {
    if (!msn || pos === "no") {
        return;
    }

    const tmp = [];

    if (is_empty(err_data)) {
        tmp.push({
            sn: msn,
            pos: pos,
        });

        err_data = tmp;

        return true;
    }

    const f = err_data.find(d => d.sn === msn);
    if (f) {
        return false;
    }

    tmp.push({
        sn: msn,
        pos: pos,
    });

    err_data.forEach(d => tmp.push(d));

    d_sort(tmp, "pos", true);

    err_data = tmp;

    return true;
};

export {info_data, info_update, info_rm, has_pos, is_new, init_info, clear_info, msn_info, msn_data, msn_error, err_data};
